@echo off
REM CMD 脚本用于部署 DeepSeek 模型 to Open-WebUI (无独立显卡版本 - CPU 推理)

chcp 65001 > nul

echo ---------------------------------------------------------
echo         DeepSeek 模型 + Open-WebUI 部署脚本 (CPU 版)
echo ---------------------------------------------------------
echo.

set user_port=3000

echo 检查 Docker 安装...
where docker >nul 2>&1
if %errorlevel% neq 0 (
    echo 错误：未检测到 Docker 安装。
    echo 请先下载并安装 Docker Desktop for Windows：https://www.docker.com/products/docker-desktop
    echo 安装完成后，请确保 Docker Desktop 正在运行。
    pause
    exit /b 1
)
echo Docker 已安装。

echo 检查 Ollama 安装...
where ollama >nul 2>&1
if %errorlevel% neq 0 (
    echo Ollama 未安装。
    echo 请先下载并安装 Ollama：https://ollama.com/download/OllamaSetup.exe
    echo 安装完成后，请确保 Ollama 正在运行。
    pause
    exit /b 1
)
echo Ollama 已安装。


:get_user_input
echo.
echo 请输入 Open-WebUI 绑定的端口号 (默认为 3000):
set /p user_port="端口号 (默认为 3000): "


echo.
echo 请输入 Docker 挂载的本地路径 (默认为当前目录):
set /p mount_path="挂载路径 (默认为当前目录): "
if not defined mount_path set mount_path=%cd%

echo 确保挂载路径存在...
if not exist "%mount_path%" mkdir "%mount_path%"
echo 使用挂载路径: %mount_path%

:run_docker_container
echo.
echo 启动 Open-WebUI Docker 容器...
docker run -d -p %user_port%:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

if %errorlevel% neq 0 (
    echo 错误：Open-WebUI 容器启动失败！请检查 Docker 是否正常运行，或查看 Docker 日志 (docker logs open-webui)。
    pause
    exit /b 1
)

:model_selection
echo.
echo ---------------------------------------------------------
echo 警告：您正在运行无独立显卡版本。模型推理将使用 CPU，速度会较慢。
echo      建议选择较小的模型以获得更好的体验。
echo      Open-WebUI 将在 Docker 中运行，模型将从 modelscope.cn/unsloth 下载。
echo ---------------------------------------------------------
echo.

echo 请选择要安装的 DeepSeek 模型（输入数字）：
echo 1) DeepSeek-R1-1.5B (4-bit) - modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf (CPU 推荐，速度相对快，适合体验)
echo 2) DeepSeek-R1-7B (4-bit) - modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF:DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf (CPU 尝试，速度可能较慢，性能稍好)
echo 3) DeepSeek-R1-8B (4-bit) - modelscope.cn/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF:DeepSeek-R1-Distill-Llama-8B-Q4_K_M.gguf
echo 4) DeepSeek-R1-14B (4-bit) - modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF:DeepSeek-R1-Distill-Qwen-14B-Q4_K_M.gguf
echo 5) DeepSeek-R1-32B (4-bit) - modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF:DeepSeek-R1-Distill-Qwen-32B-Q4_K_M.gguf
echo.
echo 请注意：在 CPU 上运行大型模型 (如 14B, 32B) 可能非常缓慢甚至卡顿。
echo.
set /p choice="你的选择 (1-5, 默认 1): "
if not defined choice set choice=1

if "%choice%"=="1" (
    set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf
    set model_name=DeepSeek-R1-1.5B
    goto download_model_and_run
)
if "%choice%"=="2" (
    set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF:DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf
    set model_name=DeepSeek-R1-7B
    goto download_model_and_run
)
if "%choice%"=="3" (
    set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF:DeepSeek-R1-Distill-Llama-8B-Q4_K_M.gguf
    set model_name=DeepSeek-R1-8B
    goto download_model_and_run
)
if "%choice%"=="4" (
    set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-14B-GGUF:DeepSeek-R1-Distill-Qwen-14B-Q4_K_M.gguf
    set model_name=DeepSeek-R1-14B
    goto download_model_and_run
)
if "%choice%"=="5" (
    set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF:DeepSeek-R1-Distill-Qwen-32B-Q4_K_M.gguf
    set model_name=DeepSeek-R1-32B
    goto download_model_and_run
)

echo 警告：无效的选择，使用默认选项 1。
set model_url=modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF:DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf
set model_name=DeepSeek-R1-1.5B

:download_model_and_run
echo.
echo 正在下载模型： %model_name%...
echo 模型地址 (Ollama): %model_url%

ollama pull "%model_url%"
ollama cp  "%model_url%" "%model_name%"
ollama rm "%model_url%"

if %errorlevel% neq 0 (
    echo 错误：模型下载失败！请检查网络连接或 Ollama 是否正常运行。
    pause
    exit /b 1
)
echo 模型 %model_name% 下载完成！

:deployment_complete
echo.
echo ---------------------------------------------------------
echo DeepSeek 模型和 Open-WebUI 部署完成！ (CPU 版本, ModelScope 地址)
echo.
echo 请访问 http://localhost:%user_port% 在浏览器中使用 Open-WebUI。
echo.
echo Open-WebUI 启动可能需要一些时间，请耐心等待。
echo.
echo 请注意 CPU 推理速度较慢，模型响应可能需要较长时间。
echo ---------------------------------------------------------
echo 感谢使用！
echo.
pause
endlocal
exit /b 0